// hatred.c

#include <ansi.h>

inherit F_CLEAN_UP;

// 为所有的仇恨对象排序：降序
int sort_hatred(string id1, string id2, mapping hatred)
{
        mixed *d1, *d2;

        if (! arrayp(d1 = hatred[id1]) || sizeof(d1) < 2 || ! intp(d1[1]))
                return 1;

        if (! arrayp(d2 = hatred[id2]) || sizeof(d2) < 2 || ! intp(d2[1]))
                return -1;

        return d2[1] - d1[1];
}

int main(object me, string arg)
{
        object ob;
        mapping hatred;
        string fam;
        string *ids;
        mixed *data;
        string msg;
        string st;
        int count;
        int i;

        if (! wizardp(me))
                // only wizard can show every family's list
                fam = 0;
        else
        if (stringp(arg))
        {
                fam = FAMILY_D->query_family_name(arg);
                if (strlen(fam) < 2 || fam[0] < 160)
                        // 如果不是中文名字，则意味着没有还确定门派
                        fam = 0;

                if (! stringp(fam) && objectp(ob = find_player(arg)))
                {
                        // 没有 arg 这个门派，查看是否有该玩家
                        fam=query("family/family_name", ob);
                        if (! stringp(fam))
                                return notify_fail(ob->name(1) +
                                                   "现在没有加入任何门派。\n");
                }

                if (! stringp(fam))
                        return notify_fail("没有这个玩家，不能查阅相关的门派。\n");
        }

        if (! fam)
        {
                // select my family
                if( !stringp(fam=query("family/family_name", me)) )
                        return notify_fail("你现在还没有加入一个门派呢。\n");
        }

        hatred = FAMILY_D->query_family_hatred(fam);
        if (! mapp(hatred) || ! sizeof(hatred))
                return notify_fail(fam + "现在没有什么仇人。\n");

        ids = keys(hatred) - ({ 0 });
        ids = sort_array(ids, (: sort_hatred :), hatred);

        count = 0;
        msg = WHT "目前" + fam + "在江湖上的仇敌都有\n" NOR
              HIY "--------------------------------\n" NOR;
        for (i = 0; i < sizeof(ids) && count < 30; i++)
        {
                data = hatred[ids[i]];
                if (! arrayp(data) || sizeof(data) < 2 ||
                    ! stringp(data[0]) || ! intp(data[1]))
                        continue;

                st = sprintf("%s(%s%s%s)", data[0], YEL, ids[i], NOR);
                msg += sprintf("%2d. %-34s  %s%-9d%s\n",
                               ++count, st, HIR, data[1], NOR);
        }

        msg += HIY "--------------------------------\n" NOR;
        if (i < sizeof(ids))
                msg += WHT "江湖上的敌人太多，难以尽数。\n" NOR;
        else
                msg += WHT "目前一共是" + chinese_number(i) +
                       "人。\n" NOR;
        write(msg);
        return 1;
}

int help(object me)
{
           write(@HELP
指令格式: hatred

查看目前你所处的门派的痛恨对象。巫师可以查看任何门派的痛恨对
象，只需在指令中指明相关的门派或是门派中的玩家。
HELP );
           return 1;
}
